import axios from 'axios';
//必须引入这个才能实现将数据传输到后台作为对象，否则会传输为这样的数组 {"id":"162","name":"第1个","type":"callback","status":"Logged_Out"}=>""
// import qs from 'qs';

//http request 拦截器
axios.interceptors.request.use(
    config => {
        // const token = getCookie('名称');注意使用的时候需要引入cookie方法，推荐js-cookie
        config.data = JSON.stringify(config.data);
        config.headers = {
            'Content-Type':'application/x-www-form-urlencoded'
        }
        // if(token){
        //   config.params = {'token':token}
        // }
        return config;
    },
    error => {
        return Promise.reject(err);
    }
);

//http response 拦截器
axios.interceptors.response.use(
    response => {
        if(response.data.errCode ==2){
            router.push({
                path:"/login?header=false&navs=false&useBootstrap=true",
                querry:{redirect:router.currentRoute.fullPath}//从哪个页面跳转
            })
        }
        return response;
    },
    error => {
        return Promise.reject(error)
    }
)


/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */

export function get(url,params={}){
    return new Promise((resolve,reject) => {
        axios.get(url,{
            params:params
        })
            .then(response => {
                resolve(response.data);
            })
            .catch(err => {
                reject(err)
            })
    })
}


/**
 * 封装post请求
 * @param url
 * @param data
 * @param that vue的实例 加上这个参数就能够实现将查询到的数据进行缓存
 * @param noCheckCache 这个参数为true时就无论cache是否存在都不检查cache,直接查询数据库数据
 * @param datas 是表示需要缓存的那个字段，
 * @returns {Promise}
 */
export function post(url,data = {},that=null,datas="",dataType='json'){
    return new Promise((resolve,reject) => {
        if (that==null || (that!=null && that.$cache_.ifnotCached(that,datas)) || noCheckCache){//验证是否含有缓存
            $.ajax({//先用ajax来替代，axios的会有问题
                type: 'post',
                url: axios.defaults.baseURL+url,
                dataType: dataType,
                data:data,
                crossDomain:true,
                xhrFields:{
                    withCredentials:true,//运行跨域将cookie传递过去
                },
                success: function (data) {
                    var response = {data:data};//让数据统一
                    resolve(response);
                },
                error:function (err) {
                    reject(err)
                }
            });
        }
    })
}

/**
 * 封装patch请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function patch(url,data = {}){
    return new Promise((resolve,reject) => {
        axios.patch(url,data)
            .then(response => {
                resolve(response.data);
            },err => {
                reject(err)
            })
    })
}

/**
 * 封装put请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function put(url,data = {}){
    return new Promise((resolve,reject) => {
        axios.put(url,data)
            .then(response => {
                resolve(response.data);
            },err => {
                reject(err)
            })
    })
}